privateGPT MCP Server

import org.json.JSONArray; import org.json.JSONObject; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class MCPEditSourceClient { public static void main(String[] args) { // Mindestens 8 Strings im Array erforderlich, z.B.: // --server-ip 127.0.0.1 --server-port 1234 --token X --source-id Y // plus optionale: --title "..." --content "..." --groups ... if (args.length < 8) { printUsage(); return; } // Argumente einlesen String serverIp = getArgument(args, "--server-ip"); String portStr = getArgument(args, "--server-port"); String token = getArgument(args, "--token"); String sourceId = getArgument(args, "--source-id"); String title = getArgument(args, "--title"); String content = getArgument(args, "--content"); List<String> groups = getListArgument(args, "--groups"); // PrΓΌfung auf null if (serverIp == null || portStr == null || token == null || sourceId == null) { System.out.println("Fehler: Mindestens eines der Pflichtargumente fehlt."); return; } // Port in int umwandeln int serverPort; try { serverPort = Integer.parseInt(portStr); } catch (NumberFormatException e) { System.out.println("Fehler: --server-port muss eine ganzzahlige Portangabe sein."); return; } System.out.println("πŸ“€ Sende Anfrage zum Editieren einer Quelle..."); // Anfrage an den Server senden String response = sendEditSourceRequest(serverIp, serverPort, token, sourceId, title, content, groups); // Antwort ausgeben System.out.println("Response from server:"); System.out.println(response); } /** * Baut die Payload fΓΌr die "edit_source"-Anfrage zusammen und sendet sie ΓΌber TCP. */ private static String sendEditSourceRequest( String serverIp, int serverPort, String token, String sourceId, String title, String content, List<String> groups ) { // Arguments-Objekt erstellen JSONObject arguments = new JSONObject(); arguments.put("sourceId", sourceId); if (title != null && !title.trim().isEmpty()) { arguments.put("title", title); } if (content != null && !content.trim().isEmpty()) { arguments.put("content", content); } // Gruppen (falls keine ΓΌbergeben, bleibt es einfach eine leere Liste) if (groups == null) { groups = new ArrayList<>(); } JSONArray groupsArray = new JSONArray(groups); arguments.put("groups", groupsArray); // Gesamte Payload JSONObject payload = new JSONObject(); payload.put("command", "edit_source"); payload.put("token", token); payload.put("arguments", arguments); // JSON in String umwandeln String payloadJson = payload.toString(); // TCP-Verbindung aufbauen und senden try (Socket client = new Socket(serverIp, serverPort)) { // Senden OutputStream out = client.getOutputStream(); byte[] data = payloadJson.getBytes(StandardCharsets.UTF_8); out.write(data); out.flush(); // Antwort empfangen InputStream in = client.getInputStream(); byte[] buffer = new byte[4096]; StringBuilder responseBuilder = new StringBuilder(); int bytesRead; do { bytesRead = in.read(buffer); if (bytesRead > 0) { responseBuilder.append(new String(buffer, 0, bytesRead, StandardCharsets.UTF_8)); } } while (bytesRead == buffer.length); return responseBuilder.toString(); } catch (IOException e) { return "Error: " + e.getMessage(); } } /** * Liest den Wert fΓΌr ein bestimmtes Argument aus (z.B. --server-ip 127.0.0.1). */ private static String getArgument(String[] args, String key) { for (int i = 0; i < args.length - 1; i++) { if (args[i].equals(key)) { return args[i + 1]; } } return null; } /** * Liest eine Liste von Werten aus (z.B. --groups G1 G2 G3 ...), bis zum nΓ€chsten -- oder Ende. */ private static List<String> getListArgument(String[] args, String key) { List<String> result = new ArrayList<>(); for (int i = 0; i < args.length; i++) { if (args[i].equals(key)) { // Ab hier Werte einsammeln for (int j = i + 1; j < args.length; j++) { if (args[j].startsWith("--")) { break; } result.add(args[j]); } break; } } return result; } private static void printUsage() { System.out.println("Usage:"); System.out.println(" --server-ip <IP> --server-port <PORT> --token <TOKEN> --source-id <SOURCE_ID>"); System.out.println(" [--title <TITLE>] [--content <CONTENT>] [--groups <LIST_OF_GROUPS>]"); System.out.println(); System.out.println("Example:"); System.out.println(" java -cp .;json-20241224.jar MCPEditSourceClient \\"); System.out.println(" --server-ip 127.0.0.1 --server-port 1234 --token SomeToken --source-id 456 \\"); System.out.println(" --title \"Neuer Titel\" --content \"Neuer Inhalt...\" --groups DevOps Finance"); } }